home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 38 / giftif.zip / CNVHUF.H next >
C/C++ Source or Header  |  1989-11-22  |  7KB  |  197 lines

  1. /*----------------------------------------------------------------------*/
  2. /* Copyright (c) 1988-1989                        */
  3. /* by CompuServe Inc., Tucson, AZ.  All Rights Reserved            */
  4. /* CNVHUF.H can be copied and distributed freely for any        */
  5. /* non-commercial purposes. CNVHUF.H can only be incorporated        */
  6. /* into commercial software with the permission of CompuServe Inc.    */
  7. /*----------------------------------------------------------------------*/
  8.  
  9. /* Header file CNVHUF.H */
  10.  
  11. /* Global type definitions for Group 3 FAX work and TIF files */
  12.  
  13. #define WHITE        (0)
  14. #define BLACK        (1)
  15. #define LONGEST_LINE    (2432)    /* Longest line we expect */
  16. #define LONGEST_RLE    (1266)    /* Most run lengths for longest_line */
  17. #define    FAX_line_width    (1728)    /* Longest line expected from FAX */
  18. #define FAX_page_length    (4000)
  19. #define FAX_min_line    (24)    /* Minimum bits per line (20m sec rule) */
  20.  
  21. typedef    int
  22.     colors;            /* The two modes are these */
  23.  
  24. /* Structures in a TIF file as used by GAMMAfax */
  25.  
  26. typedef struct
  27.     ifd_tag_record        /* Format of tag field(s) */
  28.     {
  29.         int
  30.             IFD_tag,        /* TIF tag describing rest of element */
  31.             IFD_type;        /* Type of data referred to by IFD_tag */
  32.     long int
  33.             IFD_length;        /* Length of data referred to */
  34.     union
  35.         {
  36.         short int
  37.         short_pair[2];    /* 4 bytes are used for either 2 shorts */
  38.         long int
  39.         long_one;    /* Or one long value */
  40.         long int
  41.         offset;        /* Or pointer to later in the file */
  42.         } params;
  43.     } IFD_tag_body;
  44.  
  45. typedef struct
  46.     ifd_header_record        /* Format of Image File Directory */
  47.     {
  48.     short int
  49.         IFD_ele_cnt;
  50.     IFD_tag_body
  51.         IFD_tag_element[20];    /* IFD_ele_cnt number of these */
  52.     char
  53.         IFD_ptr_params[100];    /* Room for params after directory */
  54.     } IFD_header;
  55.  
  56. typedef struct
  57.     tif_file_header_record    /* Format of TIF header */
  58.     {
  59.     char
  60.         TIF_sign[4];    /* Signature */
  61.     long int
  62.         IFD_offset;        /* Offset to first IFD */
  63.     } TIF_header;
  64.  
  65. /* Standard TAG_tag's (TT's) and contents: */
  66.  
  67. /* The following their data in line: */
  68.  
  69. #define    TT_width    (256)    /* Image width follows */
  70. #define    TT_width_type    (3)    /* uses short integers */
  71. #define    TT_width_cnt    (1L)    /* uses only one parameter */
  72.  
  73. #define    TT_length    (257)    /* Image length */
  74. #define    TT_length_type    (3)    /* uses short integers */
  75. #define    TT_length_cnt    (1L)    /* uses only one parameter */
  76.  
  77. #define    TT_PixBits    (258)    /* Bits per pixel */
  78. #define    TT_PixBits_type    (3)    /* uses short integers */
  79. #define    TT_PixBits_cnt    (1L)    /* uses only one parameter */
  80. #define    TT_PixBits_par    (1)    /* Standard value for B/W */
  81.  
  82. #define    TT_Cmprs    (259)    /* Compression method */
  83. #define    TT_Cmprs_type    (3)    /* uses short integers */
  84. #define    TT_Cmprs_cnt    (1L)    /* uses only one parameter */
  85. #define    TT_Cmprs_par    (3)    /* Standard value for Group3 */
  86.  
  87. #define    TT_Revrs    (262)    /* Color reversal */
  88. #define    TT_Revrs_type    (3)    /* uses short integers */
  89. #define    TT_Revrs_cnt    (1L)    /* uses only one parameter */
  90. #define    TT_Revrs_par    (0)    /* Standard value for black on white */
  91.  
  92. #define    TT_MSBend    (266)    /* True if MSB is last */
  93. #define    TT_MSBend_type    (3)    /* uses short integers */
  94. #define    TT_MSBend_cnt    (1L)    /* uses only one parameter */
  95. #define    TT_MSBend_par    (1)    /* Standard value for FAX */
  96.  
  97. #define    TT_Orient    (274)    /* True if top left is (0,0) */
  98. #define    TT_Orient_type    (3)    /* uses short integers */
  99. #define    TT_Orient_cnt    (1L)    /* uses only one parameter */
  100. #define    TT_Orient_par    (1)    /* Standard value for FAX */
  101.  
  102. #define    TT_Samps    (277)    /* Number of samples per pixel */
  103. #define    TT_Samps_type    (3)    /* uses short integers */
  104. #define    TT_Samps_cnt    (1L)    /* uses only one parameter */
  105. #define    TT_Samps_par    (1)    /* Standard value for FAX */
  106.  
  107. #define    TT_Grp3Opt    (292)    /* Encoding scheme within group III */
  108. #define    TT_Grp3Opt_type    (4)    /* Uses long integers */
  109. #define    TT_Grp3Opt_cnt    (1L)    /* uses only one parameter */
  110. #define    TT_Grp3Opt_par    (0)    /* Standard value for Huffman */
  111.  
  112. #define    TT_Resol    (296)    /* Resolution unit (none, inch, cm ) */
  113. #define    TT_Resol_type    (3)    /* uses short integers */
  114. #define    TT_Resol_cnt    (1L)    /* uses only one parameter */
  115. #define    TT_Resol_par    (2)    /* Standard value for FAX density */
  116.  
  117. #define    TT_PagNum    (297)    /* This page, Total pages */
  118. #define    TT_PagNum_type    (3)    /* uses short integers */
  119. #define    TT_PagNum_cnt    (2L)    /* uses two parameters */
  120. #define    TT_PagNum_par1    (1)    /* Standard values for first page */
  121. #define    TT_PagNum_par2    (1)    /*                     of only one page */
  122.  
  123. /* The following use pointers to their data: */
  124. /*    The pointers are integer byte numbers that the data starts
  125.     on in the file */
  126.  
  127. #define    TT_Title    (270)    /* Title generated by FAX */
  128. #define    TT_Title_type    (2)    /* Uses text */
  129.  
  130. #define    TT_Image    (273)    /* Image generated by FAX */
  131. #define    TT_Image_type    (3)    /* Integers */
  132.  
  133. #define    TT_X_dense    (282)    /* X_dense generated by FAX */
  134. #define TT_X_dense_cnt    (1L)    /* Only one parameter */
  135. #define    TT_X_dense_type    (5)    /* Rational fraction */
  136. #define    TT_X_dense_par1    (204)    /* 204 dots per */
  137. #define    TT_X_dense_par2    (1)    /*        1 inch */
  138.  
  139. #define    TT_Y_dense    (283)    /* Y_dense generated by FAX */
  140. #define TT_Y_dense_cnt    (1L)    /* Only one parameter */
  141. #define    TT_Y_dense_type    (5)    /* Rational fraction */
  142. #define    TT_Y_dense_par1    (196)    /* 196 dots per */
  143. #define    TT_Y_dense_par2    (1)    /*              1 inch */
  144.  
  145. /* Other fields: */
  146.  
  147. #define    TIF_sign_par    "II*\000"    /* Text at beginning of TIF file */
  148. #define    TIF_msc_1    ((8,0))        /* Additional data there */
  149.  
  150. typedef    int
  151.     INTER_ARR1[LONGEST_RLE];        /* Highest number of runs in a line */
  152.  
  153. typedef    struct
  154.     rle_line_record
  155.     {
  156.     int
  157.         line_length,    /* Total pixels on line */
  158.         rle_count,        /* Total run-lengths here */
  159.         rle_pointer;    /* Current entry in rle_list */
  160.     colors
  161.         rle_color;        /* Color of current run */
  162.     int
  163.         rle_start_column,    /* Starting column of rle_pointer */
  164.         current_column;    /* Current pixel position */
  165.     INTER_ARR1
  166.         rle_list;
  167.     } rle_line;
  168.  
  169. typedef    int
  170.     node_label;        /* Used for last 4 bits of code */
  171.  
  172. typedef struct
  173.     huffman_node_record {    /* There is one record per 8 bit possibility */
  174.     unsigned char    bits_consumed;    /* Significant bits in this entry */
  175.     int        run_length;    /* (if over 8 insert 0 here */
  176.     } huffman_node;
  177.  
  178. typedef huffman_node
  179.     table_1st_bits[256][2],
  180.     table_end_bits[16];
  181.  
  182. typedef struct
  183.     huffman_code_record {    /* There is one record for each array entry */
  184.     unsigned char
  185.        code_bits;        /* Length of following code */
  186.     short int
  187.        code_value;        /* The code itself */
  188.     } huffman_code;
  189.  
  190. typedef char
  191.     file_name_string[(20)+1];
  192.  
  193. /* Declare globals */
  194.  
  195. extern int
  196.     scan_lines;
  197.